package de.thwildau.tm.moses.avro.parser.antlr.internal; 

import org.eclipse.xtext.*;
import org.eclipse.xtext.parser.*;
import org.eclipse.xtext.parser.impl.*;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
import org.eclipse.xtext.parser.antlr.XtextTokenStream;
import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
import de.thwildau.tm.moses.avro.services.SchemaGrammarAccess;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
@SuppressWarnings("all")
public class InternalSchemaParser extends AbstractInternalAntlrParser {
    public static final String[] tokenNames = new String[] {
        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_INT", "RULE_ID", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'{'", "','", "'}'", "':'", "'['", "']'", "'true'", "'false'", "'null'"
    };
    public static final int T__19=19;
    public static final int RULE_ID=6;
    public static final int RULE_STRING=4;
    public static final int T__16=16;
    public static final int T__15=15;
    public static final int T__18=18;
    public static final int T__17=17;
    public static final int T__12=12;
    public static final int T__11=11;
    public static final int T__14=14;
    public static final int T__13=13;
    public static final int RULE_ANY_OTHER=10;
    public static final int RULE_INT=5;
    public static final int RULE_WS=9;
    public static final int RULE_SL_COMMENT=8;
    public static final int EOF=-1;
    public static final int RULE_ML_COMMENT=7;

    // delegates
    // delegators


        public InternalSchemaParser(TokenStream input) {
            this(input, new RecognizerSharedState());
        }
        public InternalSchemaParser(TokenStream input, RecognizerSharedState state) {
            super(input, state);
            this.state.ruleMemo = new HashMap[22+1];
             
             
        }
        

    public String[] getTokenNames() { return InternalSchemaParser.tokenNames; }
    public String getGrammarFileName() { return "../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g"; }



    /*
      This grammar contains a lot of empty actions to work around a bug in ANTLR.
      Otherwise the ANTLR tool will create synpreds that cannot be compiled in some rare cases.
    */
     
     	private SchemaGrammarAccess grammarAccess;
     	
        public InternalSchemaParser(TokenStream input, SchemaGrammarAccess grammarAccess) {
            this(input);
            this.grammarAccess = grammarAccess;
            registerRules(grammarAccess.getGrammar());
        }
        
        @Override
        protected String getFirstRuleName() {
        	return "AvroSchema";	
       	}
       	
       	@Override
       	protected SchemaGrammarAccess getGrammarAccess() {
       		return grammarAccess;
       	}



    // $ANTLR start "entryRuleAvroSchema"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:74:1: entryRuleAvroSchema returns [EObject current=null] : iv_ruleAvroSchema= ruleAvroSchema EOF ;
    public final EObject entryRuleAvroSchema() throws RecognitionException {
        EObject current = null;
        int entryRuleAvroSchema_StartIndex = input.index();
        EObject iv_ruleAvroSchema = null;


        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 1) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:75:2: (iv_ruleAvroSchema= ruleAvroSchema EOF )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:76:2: iv_ruleAvroSchema= ruleAvroSchema EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getAvroSchemaRule()); 
            }
            pushFollow(FOLLOW_ruleAvroSchema_in_entryRuleAvroSchema88);
            iv_ruleAvroSchema=ruleAvroSchema();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleAvroSchema; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleAvroSchema98); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 1, entryRuleAvroSchema_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "entryRuleAvroSchema"


    // $ANTLR start "ruleAvroSchema"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:83:1: ruleAvroSchema returns [EObject current=null] : ( () otherlv_1= '{' ( (lv_members_2_0= ruleMember ) )? (otherlv_3= ',' ( (lv_members_4_0= ruleMember ) ) )* otherlv_5= '}' ) ;
    public final EObject ruleAvroSchema() throws RecognitionException {
        EObject current = null;
        int ruleAvroSchema_StartIndex = input.index();
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_members_2_0 = null;

        EObject lv_members_4_0 = null;


         enterRule(); 
            
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 2) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:86:28: ( ( () otherlv_1= '{' ( (lv_members_2_0= ruleMember ) )? (otherlv_3= ',' ( (lv_members_4_0= ruleMember ) ) )* otherlv_5= '}' ) )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:87:1: ( () otherlv_1= '{' ( (lv_members_2_0= ruleMember ) )? (otherlv_3= ',' ( (lv_members_4_0= ruleMember ) ) )* otherlv_5= '}' )
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:87:1: ( () otherlv_1= '{' ( (lv_members_2_0= ruleMember ) )? (otherlv_3= ',' ( (lv_members_4_0= ruleMember ) ) )* otherlv_5= '}' )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:87:2: () otherlv_1= '{' ( (lv_members_2_0= ruleMember ) )? (otherlv_3= ',' ( (lv_members_4_0= ruleMember ) ) )* otherlv_5= '}'
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:87:2: ()
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:88:2: 
            {
            if ( state.backtracking==0 ) {
               
              	  /* */ 
              	
            }
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getAvroSchemaAccess().getAvroSchemaAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,11,FOLLOW_11_in_ruleAvroSchema147); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getAvroSchemaAccess().getLeftCurlyBracketKeyword_1());
                  
            }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:100:1: ( (lv_members_2_0= ruleMember ) )?
            int alt1=2;
            int LA1_0 = input.LA(1);

            if ( (LA1_0==RULE_STRING) ) {
                alt1=1;
            }
            switch (alt1) {
                case 1 :
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:101:1: (lv_members_2_0= ruleMember )
                    {
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:101:1: (lv_members_2_0= ruleMember )
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:102:3: lv_members_2_0= ruleMember
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getAvroSchemaAccess().getMembersMemberParserRuleCall_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleMember_in_ruleAvroSchema168);
                    lv_members_2_0=ruleMember();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getAvroSchemaRule());
                      	        }
                             		add(
                             			current, 
                             			"members",
                              		lv_members_2_0, 
                              		"Member");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:118:3: (otherlv_3= ',' ( (lv_members_4_0= ruleMember ) ) )*
            loop2:
            do {
                int alt2=2;
                int LA2_0 = input.LA(1);

                if ( (LA2_0==12) ) {
                    alt2=1;
                }


                switch (alt2) {
            	case 1 :
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:118:5: otherlv_3= ',' ( (lv_members_4_0= ruleMember ) )
            	    {
            	    otherlv_3=(Token)match(input,12,FOLLOW_12_in_ruleAvroSchema182); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getAvroSchemaAccess().getCommaKeyword_3_0());
            	          
            	    }
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:122:1: ( (lv_members_4_0= ruleMember ) )
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:123:1: (lv_members_4_0= ruleMember )
            	    {
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:123:1: (lv_members_4_0= ruleMember )
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:124:3: lv_members_4_0= ruleMember
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getAvroSchemaAccess().getMembersMemberParserRuleCall_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleMember_in_ruleAvroSchema203);
            	    lv_members_4_0=ruleMember();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getAvroSchemaRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"members",
            	              		lv_members_4_0, 
            	              		"Member");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop2;
                }
            } while (true);

            otherlv_5=(Token)match(input,13,FOLLOW_13_in_ruleAvroSchema217); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getAvroSchemaAccess().getRightCurlyBracketKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 2, ruleAvroSchema_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "ruleAvroSchema"


    // $ANTLR start "entryRuleMember"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:152:1: entryRuleMember returns [EObject current=null] : iv_ruleMember= ruleMember EOF ;
    public final EObject entryRuleMember() throws RecognitionException {
        EObject current = null;
        int entryRuleMember_StartIndex = input.index();
        EObject iv_ruleMember = null;


        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 3) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:153:2: (iv_ruleMember= ruleMember EOF )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:154:2: iv_ruleMember= ruleMember EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getMemberRule()); 
            }
            pushFollow(FOLLOW_ruleMember_in_entryRuleMember253);
            iv_ruleMember=ruleMember();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleMember; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleMember263); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 3, entryRuleMember_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "entryRuleMember"


    // $ANTLR start "ruleMember"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:161:1: ruleMember returns [EObject current=null] : ( ( (lv_key_0_0= RULE_STRING ) ) otherlv_1= ':' ( (lv_value_2_0= ruleValue ) ) ) ;
    public final EObject ruleMember() throws RecognitionException {
        EObject current = null;
        int ruleMember_StartIndex = input.index();
        Token lv_key_0_0=null;
        Token otherlv_1=null;
        EObject lv_value_2_0 = null;


         enterRule(); 
            
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 4) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:164:28: ( ( ( (lv_key_0_0= RULE_STRING ) ) otherlv_1= ':' ( (lv_value_2_0= ruleValue ) ) ) )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:165:1: ( ( (lv_key_0_0= RULE_STRING ) ) otherlv_1= ':' ( (lv_value_2_0= ruleValue ) ) )
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:165:1: ( ( (lv_key_0_0= RULE_STRING ) ) otherlv_1= ':' ( (lv_value_2_0= ruleValue ) ) )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:165:2: ( (lv_key_0_0= RULE_STRING ) ) otherlv_1= ':' ( (lv_value_2_0= ruleValue ) )
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:165:2: ( (lv_key_0_0= RULE_STRING ) )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:166:1: (lv_key_0_0= RULE_STRING )
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:166:1: (lv_key_0_0= RULE_STRING )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:167:3: lv_key_0_0= RULE_STRING
            {
            lv_key_0_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleMember305); if (state.failed) return current;
            if ( state.backtracking==0 ) {

              			newLeafNode(lv_key_0_0, grammarAccess.getMemberAccess().getKeySTRINGTerminalRuleCall_0_0()); 
              		
            }
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElement(grammarAccess.getMemberRule());
              	        }
                     		setWithLastConsumed(
                     			current, 
                     			"key",
                      		lv_key_0_0, 
                      		"STRING");
              	    
            }

            }


            }

            otherlv_1=(Token)match(input,14,FOLLOW_14_in_ruleMember322); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getMemberAccess().getColonKeyword_1());
                  
            }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:187:1: ( (lv_value_2_0= ruleValue ) )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:188:1: (lv_value_2_0= ruleValue )
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:188:1: (lv_value_2_0= ruleValue )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:189:3: lv_value_2_0= ruleValue
            {
            if ( state.backtracking==0 ) {
               
              	        newCompositeNode(grammarAccess.getMemberAccess().getValueValueParserRuleCall_2_0()); 
              	    
            }
            pushFollow(FOLLOW_ruleValue_in_ruleMember343);
            lv_value_2_0=ruleValue();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {

              	        if (current==null) {
              	            current = createModelElementForParent(grammarAccess.getMemberRule());
              	        }
                     		set(
                     			current, 
                     			"value",
                      		lv_value_2_0, 
                      		"Value");
              	        afterParserOrEnumRuleCall();
              	    
            }

            }


            }


            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 4, ruleMember_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "ruleMember"


    // $ANTLR start "entryRuleValue"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:213:1: entryRuleValue returns [EObject current=null] : iv_ruleValue= ruleValue EOF ;
    public final EObject entryRuleValue() throws RecognitionException {
        EObject current = null;
        int entryRuleValue_StartIndex = input.index();
        EObject iv_ruleValue = null;


        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 5) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:214:2: (iv_ruleValue= ruleValue EOF )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:215:2: iv_ruleValue= ruleValue EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getValueRule()); 
            }
            pushFollow(FOLLOW_ruleValue_in_entryRuleValue379);
            iv_ruleValue=ruleValue();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleValue; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleValue389); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 5, entryRuleValue_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "entryRuleValue"


    // $ANTLR start "ruleValue"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:222:1: ruleValue returns [EObject current=null] : (this_AvroSchema_0= ruleAvroSchema | this_Array_1= ruleArray | ( () (this_STRING_3= RULE_STRING | ruleBoolean | ruleNull | this_INT_6= RULE_INT ) ) ) ;
    public final EObject ruleValue() throws RecognitionException {
        EObject current = null;
        int ruleValue_StartIndex = input.index();
        Token this_STRING_3=null;
        Token this_INT_6=null;
        EObject this_AvroSchema_0 = null;

        EObject this_Array_1 = null;


         enterRule(); 
            
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 6) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:225:28: ( (this_AvroSchema_0= ruleAvroSchema | this_Array_1= ruleArray | ( () (this_STRING_3= RULE_STRING | ruleBoolean | ruleNull | this_INT_6= RULE_INT ) ) ) )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:226:1: (this_AvroSchema_0= ruleAvroSchema | this_Array_1= ruleArray | ( () (this_STRING_3= RULE_STRING | ruleBoolean | ruleNull | this_INT_6= RULE_INT ) ) )
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:226:1: (this_AvroSchema_0= ruleAvroSchema | this_Array_1= ruleArray | ( () (this_STRING_3= RULE_STRING | ruleBoolean | ruleNull | this_INT_6= RULE_INT ) ) )
            int alt4=3;
            switch ( input.LA(1) ) {
            case 11:
                {
                alt4=1;
                }
                break;
            case 15:
                {
                alt4=2;
                }
                break;
            case RULE_STRING:
            case RULE_INT:
            case 17:
            case 18:
            case 19:
                {
                alt4=3;
                }
                break;
            default:
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 4, 0, input);

                throw nvae;
            }

            switch (alt4) {
                case 1 :
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:227:2: this_AvroSchema_0= ruleAvroSchema
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getValueAccess().getAvroSchemaParserRuleCall_0()); 
                          
                    }
                    pushFollow(FOLLOW_ruleAvroSchema_in_ruleValue439);
                    this_AvroSchema_0=ruleAvroSchema();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_AvroSchema_0; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 2 :
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:240:2: this_Array_1= ruleArray
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {
                       
                              newCompositeNode(grammarAccess.getValueAccess().getArrayParserRuleCall_1()); 
                          
                    }
                    pushFollow(FOLLOW_ruleArray_in_ruleValue469);
                    this_Array_1=ruleArray();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {
                       
                              current = this_Array_1; 
                              afterParserOrEnumRuleCall();
                          
                    }

                    }
                    break;
                case 3 :
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:252:6: ( () (this_STRING_3= RULE_STRING | ruleBoolean | ruleNull | this_INT_6= RULE_INT ) )
                    {
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:252:6: ( () (this_STRING_3= RULE_STRING | ruleBoolean | ruleNull | this_INT_6= RULE_INT ) )
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:252:7: () (this_STRING_3= RULE_STRING | ruleBoolean | ruleNull | this_INT_6= RULE_INT )
                    {
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:252:7: ()
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:253:2: 
                    {
                    if ( state.backtracking==0 ) {
                       
                      	  /* */ 
                      	
                    }
                    if ( state.backtracking==0 ) {

                              current = forceCreateModelElement(
                                  grammarAccess.getValueAccess().getValueAction_2_0(),
                                  current);
                          
                    }

                    }

                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:261:2: (this_STRING_3= RULE_STRING | ruleBoolean | ruleNull | this_INT_6= RULE_INT )
                    int alt3=4;
                    switch ( input.LA(1) ) {
                    case RULE_STRING:
                        {
                        alt3=1;
                        }
                        break;
                    case 17:
                    case 18:
                        {
                        alt3=2;
                        }
                        break;
                    case 19:
                        {
                        alt3=3;
                        }
                        break;
                    case RULE_INT:
                        {
                        alt3=4;
                        }
                        break;
                    default:
                        if (state.backtracking>0) {state.failed=true; return current;}
                        NoViableAltException nvae =
                            new NoViableAltException("", 3, 0, input);

                        throw nvae;
                    }

                    switch (alt3) {
                        case 1 :
                            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:261:3: this_STRING_3= RULE_STRING
                            {
                            this_STRING_3=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleValue499); if (state.failed) return current;
                            if ( state.backtracking==0 ) {
                               
                                  newLeafNode(this_STRING_3, grammarAccess.getValueAccess().getSTRINGTerminalRuleCall_2_1_0()); 
                                  
                            }

                            }
                            break;
                        case 2 :
                            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:267:2: ruleBoolean
                            {
                            if ( state.backtracking==0 ) {
                               
                              	  /* */ 
                              	
                            }
                            if ( state.backtracking==0 ) {
                               
                                      newCompositeNode(grammarAccess.getValueAccess().getBooleanParserRuleCall_2_1_1()); 
                                  
                            }
                            pushFollow(FOLLOW_ruleBoolean_in_ruleValue523);
                            ruleBoolean();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {
                               
                                      afterParserOrEnumRuleCall();
                                  
                            }

                            }
                            break;
                        case 3 :
                            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:279:2: ruleNull
                            {
                            if ( state.backtracking==0 ) {
                               
                              	  /* */ 
                              	
                            }
                            if ( state.backtracking==0 ) {
                               
                                      newCompositeNode(grammarAccess.getValueAccess().getNullParserRuleCall_2_1_2()); 
                                  
                            }
                            pushFollow(FOLLOW_ruleNull_in_ruleValue547);
                            ruleNull();

                            state._fsp--;
                            if (state.failed) return current;
                            if ( state.backtracking==0 ) {
                               
                                      afterParserOrEnumRuleCall();
                                  
                            }

                            }
                            break;
                        case 4 :
                            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:290:6: this_INT_6= RULE_INT
                            {
                            this_INT_6=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleValue563); if (state.failed) return current;
                            if ( state.backtracking==0 ) {
                               
                                  newLeafNode(this_INT_6, grammarAccess.getValueAccess().getINTTerminalRuleCall_2_1_3()); 
                                  
                            }

                            }
                            break;

                    }


                    }


                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 6, ruleValue_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "ruleValue"


    // $ANTLR start "entryRuleArray"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:302:1: entryRuleArray returns [EObject current=null] : iv_ruleArray= ruleArray EOF ;
    public final EObject entryRuleArray() throws RecognitionException {
        EObject current = null;
        int entryRuleArray_StartIndex = input.index();
        EObject iv_ruleArray = null;


        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 7) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:303:2: (iv_ruleArray= ruleArray EOF )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:304:2: iv_ruleArray= ruleArray EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getArrayRule()); 
            }
            pushFollow(FOLLOW_ruleArray_in_entryRuleArray600);
            iv_ruleArray=ruleArray();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleArray; 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleArray610); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 7, entryRuleArray_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "entryRuleArray"


    // $ANTLR start "ruleArray"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:311:1: ruleArray returns [EObject current=null] : ( () otherlv_1= '[' ( (lv_values_2_0= ruleValue ) )? (otherlv_3= ',' ( (lv_values_4_0= ruleValue ) ) )* otherlv_5= ']' ) ;
    public final EObject ruleArray() throws RecognitionException {
        EObject current = null;
        int ruleArray_StartIndex = input.index();
        Token otherlv_1=null;
        Token otherlv_3=null;
        Token otherlv_5=null;
        EObject lv_values_2_0 = null;

        EObject lv_values_4_0 = null;


         enterRule(); 
            
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 8) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:314:28: ( ( () otherlv_1= '[' ( (lv_values_2_0= ruleValue ) )? (otherlv_3= ',' ( (lv_values_4_0= ruleValue ) ) )* otherlv_5= ']' ) )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:315:1: ( () otherlv_1= '[' ( (lv_values_2_0= ruleValue ) )? (otherlv_3= ',' ( (lv_values_4_0= ruleValue ) ) )* otherlv_5= ']' )
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:315:1: ( () otherlv_1= '[' ( (lv_values_2_0= ruleValue ) )? (otherlv_3= ',' ( (lv_values_4_0= ruleValue ) ) )* otherlv_5= ']' )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:315:2: () otherlv_1= '[' ( (lv_values_2_0= ruleValue ) )? (otherlv_3= ',' ( (lv_values_4_0= ruleValue ) ) )* otherlv_5= ']'
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:315:2: ()
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:316:2: 
            {
            if ( state.backtracking==0 ) {
               
              	  /* */ 
              	
            }
            if ( state.backtracking==0 ) {

                      current = forceCreateModelElement(
                          grammarAccess.getArrayAccess().getArrayAction_0(),
                          current);
                  
            }

            }

            otherlv_1=(Token)match(input,15,FOLLOW_15_in_ruleArray659); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_1, grammarAccess.getArrayAccess().getLeftSquareBracketKeyword_1());
                  
            }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:328:1: ( (lv_values_2_0= ruleValue ) )?
            int alt5=2;
            int LA5_0 = input.LA(1);

            if ( ((LA5_0>=RULE_STRING && LA5_0<=RULE_INT)||LA5_0==11||LA5_0==15||(LA5_0>=17 && LA5_0<=19)) ) {
                alt5=1;
            }
            switch (alt5) {
                case 1 :
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:329:1: (lv_values_2_0= ruleValue )
                    {
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:329:1: (lv_values_2_0= ruleValue )
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:330:3: lv_values_2_0= ruleValue
                    {
                    if ( state.backtracking==0 ) {
                       
                      	        newCompositeNode(grammarAccess.getArrayAccess().getValuesValueParserRuleCall_2_0()); 
                      	    
                    }
                    pushFollow(FOLLOW_ruleValue_in_ruleArray680);
                    lv_values_2_0=ruleValue();

                    state._fsp--;
                    if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                      	        if (current==null) {
                      	            current = createModelElementForParent(grammarAccess.getArrayRule());
                      	        }
                             		add(
                             			current, 
                             			"values",
                              		lv_values_2_0, 
                              		"Value");
                      	        afterParserOrEnumRuleCall();
                      	    
                    }

                    }


                    }
                    break;

            }

            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:346:3: (otherlv_3= ',' ( (lv_values_4_0= ruleValue ) ) )*
            loop6:
            do {
                int alt6=2;
                int LA6_0 = input.LA(1);

                if ( (LA6_0==12) ) {
                    alt6=1;
                }


                switch (alt6) {
            	case 1 :
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:346:5: otherlv_3= ',' ( (lv_values_4_0= ruleValue ) )
            	    {
            	    otherlv_3=(Token)match(input,12,FOLLOW_12_in_ruleArray694); if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	          	newLeafNode(otherlv_3, grammarAccess.getArrayAccess().getCommaKeyword_3_0());
            	          
            	    }
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:350:1: ( (lv_values_4_0= ruleValue ) )
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:351:1: (lv_values_4_0= ruleValue )
            	    {
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:351:1: (lv_values_4_0= ruleValue )
            	    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:352:3: lv_values_4_0= ruleValue
            	    {
            	    if ( state.backtracking==0 ) {
            	       
            	      	        newCompositeNode(grammarAccess.getArrayAccess().getValuesValueParserRuleCall_3_1_0()); 
            	      	    
            	    }
            	    pushFollow(FOLLOW_ruleValue_in_ruleArray715);
            	    lv_values_4_0=ruleValue();

            	    state._fsp--;
            	    if (state.failed) return current;
            	    if ( state.backtracking==0 ) {

            	      	        if (current==null) {
            	      	            current = createModelElementForParent(grammarAccess.getArrayRule());
            	      	        }
            	             		add(
            	             			current, 
            	             			"values",
            	              		lv_values_4_0, 
            	              		"Value");
            	      	        afterParserOrEnumRuleCall();
            	      	    
            	    }

            	    }


            	    }


            	    }
            	    break;

            	default :
            	    break loop6;
                }
            } while (true);

            otherlv_5=(Token)match(input,16,FOLLOW_16_in_ruleArray729); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                  	newLeafNode(otherlv_5, grammarAccess.getArrayAccess().getRightSquareBracketKeyword_4());
                  
            }

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 8, ruleArray_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "ruleArray"


    // $ANTLR start "entryRuleBoolean"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:380:1: entryRuleBoolean returns [String current=null] : iv_ruleBoolean= ruleBoolean EOF ;
    public final String entryRuleBoolean() throws RecognitionException {
        String current = null;
        int entryRuleBoolean_StartIndex = input.index();
        AntlrDatatypeRuleToken iv_ruleBoolean = null;


        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 9) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:381:2: (iv_ruleBoolean= ruleBoolean EOF )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:382:2: iv_ruleBoolean= ruleBoolean EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getBooleanRule()); 
            }
            pushFollow(FOLLOW_ruleBoolean_in_entryRuleBoolean766);
            iv_ruleBoolean=ruleBoolean();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleBoolean.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleBoolean777); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 9, entryRuleBoolean_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "entryRuleBoolean"


    // $ANTLR start "ruleBoolean"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:389:1: ruleBoolean returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (kw= 'true' | kw= 'false' ) ;
    public final AntlrDatatypeRuleToken ruleBoolean() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
        int ruleBoolean_StartIndex = input.index();
        Token kw=null;

         enterRule(); 
            
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 10) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:392:28: ( (kw= 'true' | kw= 'false' ) )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:393:1: (kw= 'true' | kw= 'false' )
            {
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:393:1: (kw= 'true' | kw= 'false' )
            int alt7=2;
            int LA7_0 = input.LA(1);

            if ( (LA7_0==17) ) {
                alt7=1;
            }
            else if ( (LA7_0==18) ) {
                alt7=2;
            }
            else {
                if (state.backtracking>0) {state.failed=true; return current;}
                NoViableAltException nvae =
                    new NoViableAltException("", 7, 0, input);

                throw nvae;
            }
            switch (alt7) {
                case 1 :
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:394:2: kw= 'true'
                    {
                    kw=(Token)match(input,17,FOLLOW_17_in_ruleBoolean815); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getBooleanAccess().getTrueKeyword_0()); 
                          
                    }

                    }
                    break;
                case 2 :
                    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:401:2: kw= 'false'
                    {
                    kw=(Token)match(input,18,FOLLOW_18_in_ruleBoolean834); if (state.failed) return current;
                    if ( state.backtracking==0 ) {

                              current.merge(kw);
                              newLeafNode(kw, grammarAccess.getBooleanAccess().getFalseKeyword_1()); 
                          
                    }

                    }
                    break;

            }


            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 10, ruleBoolean_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "ruleBoolean"


    // $ANTLR start "entryRuleNull"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:414:1: entryRuleNull returns [String current=null] : iv_ruleNull= ruleNull EOF ;
    public final String entryRuleNull() throws RecognitionException {
        String current = null;
        int entryRuleNull_StartIndex = input.index();
        AntlrDatatypeRuleToken iv_ruleNull = null;


        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 11) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:415:2: (iv_ruleNull= ruleNull EOF )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:416:2: iv_ruleNull= ruleNull EOF
            {
            if ( state.backtracking==0 ) {
               newCompositeNode(grammarAccess.getNullRule()); 
            }
            pushFollow(FOLLOW_ruleNull_in_entryRuleNull875);
            iv_ruleNull=ruleNull();

            state._fsp--;
            if (state.failed) return current;
            if ( state.backtracking==0 ) {
               current =iv_ruleNull.getText(); 
            }
            match(input,EOF,FOLLOW_EOF_in_entryRuleNull886); if (state.failed) return current;

            }

        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 11, entryRuleNull_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "entryRuleNull"


    // $ANTLR start "ruleNull"
    // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:423:1: ruleNull returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : kw= 'null' ;
    public final AntlrDatatypeRuleToken ruleNull() throws RecognitionException {
        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
        int ruleNull_StartIndex = input.index();
        Token kw=null;

         enterRule(); 
            
        try {
            if ( state.backtracking>0 && alreadyParsedRule(input, 12) ) { return current; }
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:426:28: (kw= 'null' )
            // ../de.thwildau.tm.moses.avro/src-gen/de/thwildau/tm/moses/avro/parser/antlr/internal/InternalSchema.g:428:2: kw= 'null'
            {
            kw=(Token)match(input,19,FOLLOW_19_in_ruleNull923); if (state.failed) return current;
            if ( state.backtracking==0 ) {

                      current.merge(kw);
                      newLeafNode(kw, grammarAccess.getNullAccess().getNullKeyword()); 
                  
            }

            }

            if ( state.backtracking==0 ) {
               leaveRule(); 
            }
        }
         
            catch (RecognitionException re) { 
                recover(input,re); 
                appendSkippedTokens();
            } 
        finally {
            if ( state.backtracking>0 ) { memoize(input, 12, ruleNull_StartIndex); }
        }
        return current;
    }
    // $ANTLR end "ruleNull"

    // Delegated rules


 

    public static final BitSet FOLLOW_ruleAvroSchema_in_entryRuleAvroSchema88 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleAvroSchema98 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_11_in_ruleAvroSchema147 = new BitSet(new long[]{0x0000000000003010L});
    public static final BitSet FOLLOW_ruleMember_in_ruleAvroSchema168 = new BitSet(new long[]{0x0000000000003000L});
    public static final BitSet FOLLOW_12_in_ruleAvroSchema182 = new BitSet(new long[]{0x0000000000000010L});
    public static final BitSet FOLLOW_ruleMember_in_ruleAvroSchema203 = new BitSet(new long[]{0x0000000000003000L});
    public static final BitSet FOLLOW_13_in_ruleAvroSchema217 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleMember_in_entryRuleMember253 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleMember263 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleMember305 = new BitSet(new long[]{0x0000000000004000L});
    public static final BitSet FOLLOW_14_in_ruleMember322 = new BitSet(new long[]{0x00000000000E8830L});
    public static final BitSet FOLLOW_ruleValue_in_ruleMember343 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleValue_in_entryRuleValue379 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleValue389 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleAvroSchema_in_ruleValue439 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleArray_in_ruleValue469 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_STRING_in_ruleValue499 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBoolean_in_ruleValue523 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNull_in_ruleValue547 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_RULE_INT_in_ruleValue563 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleArray_in_entryRuleArray600 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleArray610 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_15_in_ruleArray659 = new BitSet(new long[]{0x00000000000F9830L});
    public static final BitSet FOLLOW_ruleValue_in_ruleArray680 = new BitSet(new long[]{0x0000000000011000L});
    public static final BitSet FOLLOW_12_in_ruleArray694 = new BitSet(new long[]{0x00000000000E8830L});
    public static final BitSet FOLLOW_ruleValue_in_ruleArray715 = new BitSet(new long[]{0x0000000000011000L});
    public static final BitSet FOLLOW_16_in_ruleArray729 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleBoolean_in_entryRuleBoolean766 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleBoolean777 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_17_in_ruleBoolean815 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_18_in_ruleBoolean834 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_ruleNull_in_entryRuleNull875 = new BitSet(new long[]{0x0000000000000000L});
    public static final BitSet FOLLOW_EOF_in_entryRuleNull886 = new BitSet(new long[]{0x0000000000000002L});
    public static final BitSet FOLLOW_19_in_ruleNull923 = new BitSet(new long[]{0x0000000000000002L});

}